package CreationPattern.Prototype;

import lombok.Data;

import java.util.Date;

/**
 * @Classname : ShallowCopySheep
 * @Description : 浅拷贝
 * 拷贝理解：
 * 1、JVM中对象可以被拷贝条件：对象所属类实现Cloneable接口，且重写原始父类Object的clone()方法
 * 2、Object的clone()方法原理：
 *   ① 从堆内存中以二进制流的方式进行拷贝，重新分配一个内存块，不会调用构造器
 *   ② 只拷贝当前对象，对象内部的成员变量若是可变的引用对象（字符串可看做基本数据类型），则不拷贝而是通过引用共享
 * @Author : chentianyu
 * @Date 2023/1/23 20:06
 */

public class ShallowCopySheep extends Sheep implements Cloneable {

    public ShallowCopySheep(String name) {
        super(name);
    }

    @Override
    public ShallowCopySheep clone() {
        try {
            ShallowCopySheep clone = (ShallowCopySheep) super.clone();
            // TODO: copy mutable state here, so the clone can't change the internals of the original
            return clone;
        } catch (CloneNotSupportedException e) {
            throw new AssertionError();
        }
    }

}
